﻿
// Copyright (c) 2024 神诺科技 www.winsdk.cn
// 
// 保留所有权利。
// 
// 在满足以下条件的情况下，允许重新使用和分发：
// 
// 1. 代码必须保留上述版权声明、作者声明和/或最初发布的网址。
// 2. 不得将代码用于商业目的，除非与版权所有者签订了书面协议。
// 3. 修改过的源版本必须清楚地标识出修改的部分，并且不得以任何方式表明版权所有者支持或认可这些修改。
// 
// 禁止以任何形式的直接或间接商业利用，除非与版权所有者签订了书面协议。
// 
// 本软件由版权所有者和贡献者“按原样”提供，不提供任何形式的明示或暗示保证，包括但不限于适销性和特定用途适用性的保证。在任何情况下，即使被事先告知可能发生损害的可能性，版权所有者或贡献者也不对任何直接、间接、偶然、特殊、示范性或后果性损害承担责任（包括但不限于替代商品或服务的采购、使用损失、数据或利润损失）。



#ifndef __SN_OCR__H__
#define __SN_OCR__H__

#include "windows.h"


//返回参数
typedef struct SN_STATU {

	int code;			//错误码，如果为 0 表示成功，否则表示错误号
	char message[4096];	//错误信息，如果为 "OK" 表示成功，否则返回错误信息

}SN_STATU;


/*启动OCR文字识别服务
*
* 参数：
*	[in]  szOnnxFilePath：	设置 onnx 模型文件路径，如果设置为 NULL，默认和 DLL文件同级目录
* 	[out] pResult：			返回错误信息，参数pResult->code(错误码)如果为 0 表示成功，否则表示错误号;
*
* 返回值：成功返回0，失败返回错误号，详细错误信息请参考 pResult
*
*/
int WINAPI apiSNInitOCRServer(char* szOnnxFilePath, SN_STATU* pStatu);


/*创建OCR文字识别句柄
*
* 参数：
*	[in]  szKey：		卡密(购买卡密：https://shop.4yuns.com/links/7C9F16B7)
* 	[in]  pOnnxFilePath：设置 onnx 模型文件路径，如果设置为 NULL，默认和 DLL文件同级目录
* 	[out] pResult：		返回错误信息，参数pResult->code(错误码)如果为 0 表示成功，否则表示错误号;
*
* 返回值：成功返回句柄，失败返回NULL
*
*/
HANDLE WINAPI apiSNCreateOCRHandle(char* szKey, char* szOnnxFilePath, SN_STATU* pStatu);


/*获取OCR文字识别卡密到期时间
*
* 参数：
*	[in]  handle：		句柄（通过调用apiSNCreateOCRHandle得到）
* 	[out] pResult：		返回错误信息，参数pResult->code(错误码)如果为 0 表示成功，否则表示错误号;
*
* 返回值：返回卡密到期时间，失败返回NULL，错误信息请查看参数 pResult->message
*
*/
char* WINAPI apiSNGetKeyExpiresTime(HANDLE handle, SN_STATU* pResult);


/*获取OCR文字识别结果（以json字符串形式返回）
*
* 参数：
*	[in]  handle：			句柄（通过调用apiSNCreateOCRHandle得到）
*  	[in]  szImageFilePath：	图片路径
* 	[out] pResult：			返回错误信息，参数pResult->code(错误码)如果为 0 表示成功，否则表示错误号;
*
* 返回值：返回OCR文字识别结果（以json字符串形式返回），失败返回NULL，错误信息请查看参数 pResult->message
*
*/
char* WINAPI apiSNGetOCRFromImage(HANDLE handle, char* szImageFilePath, SN_STATU* pStatu);


/*释放OCR文字识别句柄（释放内存）
*
* 参数：
*	[in] handle：		句柄（通过调用apiSNCreateOCRHandle得到）
*
* 返回值：返回 0 表示成功，其他值表示错误号;
*
*/
int WINAPI apiSNDestroyOCRHandle(HANDLE handle);

#endif